M4 (프로그래밍 언어)
"오늘의AI위키"의 AI를 통해 더욱 풍부하고 폭넓은 지식 경험을 누리세요.
1. 개요
M4는 1977년 데니스 리치와 브라이언 커니건이 개발한 매크로 프로세싱 프로그래밍 언어이다. 초기에는 어셈블리 언어에서 반복되는 텍스트를 재사용하기 위해 사용되었으며, 현재는 GNU Autotools, sendmail 설정, SELinux 참조 정책 등 다양한 곳에서 활용된다. M4는 자유 형식 구문, 텍스트 및 매개변수 대체, 파일 포함, 문자열 조작, 조건 평가, 산술 표현식 등 다양한 기능을 제공하며, 튜링 완전성을 갖춘 언어이다. M4는 POSIX 표준에 정의되어 있으며, GNU m4, BSD m4, Inferno m4 등 다양한 구현체가 존재한다.
더 읽어볼만한 페이지
M4 (프로그래밍 언어) - [IT 관련 정보]에 관한 문서 | |
---|---|
기본 정보 | |
유형 | 매크로 프로세서 |
설계자 | 브라이언 커니핸, 데니스 리치 |
발표 연도 | 1977년 |
구현체 | GNU m4 |
웹사이트 | GNU m4 공식 웹사이트 |
GNU m4 정보 | |
개발자 | GNU 프로젝트 |
최신 릴리스 버전 | 1.4.19 |
최신 릴리스 날짜 | 2021년 5월 28일 |
운영 체제 | 유닉스 계열 |
장르 | m4 매크로 프로세서 |
라이선스 | GNU General Public License |
웹사이트 | gnu.org/s/m4 |
2. 역사
벨 연구소(AT&T Bell Laboratories)에서 더글러스 맥길로이, 로버트 모리스 등이 1960년대에 초기 범용 매크로 프로세서인 M6를 개발했다.[10][11][12]
M4는 다음과 같은 기능을 제공한다.
1977년, 데니스 리치 등은 크리스토퍼 스트레이치의 아이디어를 바탕으로 m4를 개발했다. m4는 범용 매크로 프로세서이며, 높은 확장성을 갖추고 있다. Ratfor의 첫 구현에 사용되었고, 유닉스에도 포함되었다.
GNU 프로젝트의 autoconf에서 m4를 사용하고 있으며, sendmail의 설정 파일에도 사용된다. SELinux 참조 정책은 m4 매크로 프로세서에 크게 의존한다.
m4는 코드 생성에 많이 사용되지만, 과도하게 사용하면 디버깅이 어려워질 수 있다.
3. 기능
대부분의 이전 매크로 프로세서와 달리 m4는 특정 컴퓨터나 인간 언어를 대상으로 하지 않는다. 하지만 역사적으로 m4는 포트란의 Ratfor 방언을 지원하기 위해 개발되었다. 다른 일부 매크로 프로세서와 달리 m4는 실용적인 프로그래밍 언어일 뿐만 아니라 튜링 완전하다.
정의된 매크로와 일치하는 따옴표 없는 식별자는 해당 정의로 대체된다. 식별자를 따옴표로 묶으면 나중에 따옴표로 묶인 문자열이 매크로 대체의 일부로 확장될 때까지 확장이 억제된다. 대부분의 언어와 달리 m4의 문자열은 시작 구분자로 백틱(\`), 종료 구분자로 아포스트로피(')를 사용한다. 시작 및 종료 구분자를 별도로 사용하면 문자열에서 따옴표를 임의로 중첩하여 사용할 수 있으므로 문자열의 서로 다른 부분에서 매크로 확장이 수행되는 방식과 시기를 세밀하게 제어할 수 있다.
4. 특징
- 자유 형식 구문 (줄 기반 구문이 아님)[1]
- 높은 수준의 매크로 확장 (인수는 스캔 중에 한 번, 해석 중에 다시 한 번 확장됨)[1]
- 텍스트 대체[1]
- 매개변수 대체[1]
- 파일 포함[1]
- 문자열 조작[1]
- 조건 평가[1]
- 산술 표현식[1]
- 시스템 인터페이스[1]
- 프로그래머 진단[1]
- 프로그래밍 언어 독립적[1]
- 인간 언어 독립적[1]
- 프로그래밍 언어 기능 제공[1]
대부분의 이전 매크로 프로세서와 달리 m4는 특정 컴퓨터나 인간 언어를 대상으로 하지 않는다.[1] 하지만 역사적으로 m4는 포트란의 Ratfor 방언을 지원하기 위해 개발되었다.[1] 다른 일부 매크로 프로세서와 달리 m4는 실용적인 프로그래밍 언어일 뿐만 아니라 튜링 완전하다.[1]
정의된 매크로와 일치하는 따옴표 없는 식별자는 해당 정의로 대체된다. 식별자를 따옴표로 묶으면 나중에 따옴표로 묶인 문자열이 매크로 대체의 일부로 확장될 때까지 확장이 억제된다. 대부분의 언어와 달리 m4의 문자열은 시작 구분자로 백틱(`), 종료 구분자로 아포스트로피(')를 사용한다. 시작 및 종료 구분자를 별도로 사용하면 문자열에서 따옴표를 임의로 중첩하여 사용할 수 있으므로 문자열의 서로 다른 부분에서 매크로 확장이 수행되는 방식과 시기를 세밀하게 제어할 수 있다.[1]
5. 예제
m4는 텍스트 대체, 매개변수 대체, 파일 포함, 문자열 조작, 조건 평가, 산술 표현식 등 다양한 기능을 제공하는 매크로 프로세서이다.[1] 대부분의 이전 매크로 프로세서와 달리 m4는 특정 컴퓨터나 인간 언어를 대상으로 하지 않지만, 역사적으로 포트란의 Ratfor 방언을 지원하기 위해 개발되었다.[1] 또한 m4는 튜링 완전한 실용적인 프로그래밍 언어이다.[1]
m4에서 정의된 매크로와 일치하는 따옴표 없는 식별자는 해당 정의로 대체된다.[1] 식별자를 따옴표로 묶으면 확장이 억제된다.[1] m4의 문자열은 시작 구분자로 백틱(\`), 종료 구분자로 아포스트로피(')를 사용한다.[1]
5. 1. Hello World
다음은 "Hello World"를 출력하는 코드이다.define(`print', `Hello World!')
다음 코드 조각은 HTML 생성 라이브러리의 일부를 나타낸다. 자동으로 절 제목에 번호를 매기는 매크로를 정의한다.
define(`H2_COUNT', 0)
define(`H2', `define(`H2_COUNT', incr(H2_COUNT))' dnl
`
H2_COUNT. $1
')H2(First Section)
H2(Second Section)
H2(Conclusion)
m4로 이를 처리하면 다음과 같은 텍스트가 생성된다.
1. First Section
2. Second Section
3. Conclusion
5. 2. HTML 코드 생성
다음은 HTML 코드를 생성하기 위한 라이브러리의 일부를 구성할 수 있는 간단한 예시이다. 이 예시는 섹션의 번호를 자동으로 매기는 주석 처리된 매크로를 정의한다.divert(-1)
m4는 `divert' 매크로를 사용하여 조작할 수 있는 여러 출력 큐를 가지고 있다. 유효한 큐의 범위는 0에서 10까지이며, 기본 큐는 0이다. 확장으로 GNU m4는 정수형 크기에 의해서만 제한되는 더 많은 전환을 지원한다.
잘못된 큐로 `divert' 매크로를 호출하면 다른 호출이 있을 때까지 텍스트가 삭제된다. 출력이 삭제되는 동안에도 `divert' 및 기타 매크로 주위의 따옴표는 확장을 방지하는 데 필요하다는 점에 유의해야 한다.
# 매크로는 주석 내에서 확장되지 않으므로,
# divert 및 기타 내장 함수와 같은 키워드를
# 문제없이 사용할 수 있다.
# HTML 유틸리티 매크로:
define(`H2_COUNT', 0)
# H2 매크로는 H2 매크로가 사용될 때마다 다시 정의된다.
define(`H2',
`define(`H2_COUNT', incr(H2_COUNT))
H2_COUNT. $1
')divert(1)dnl
dnl
dnl dnl 매크로는 m4가 줄의 나머지 부분을 삭제하여
dnl 원치 않는 빈 줄이 출력에 나타나는 것을 방지한다.
dnl
H2(First Section)
H2(Second Section)
H2(Conclusion)
dnl
divert(0)dnl
dnl
undivert(1)dnl 큐 중 하나가 출력으로 푸시되고 있다.
m4로 이 코드를 처리하면 다음과 같은 텍스트가 생성된다.
1. First Section
2. Second Section
3. Conclusion
다음 코드 조각은 HTML 생성 라이브러리의 일부를 나타낸다. 자동으로 절 제목에 번호를 매기는 매크로를 정의한다.
define(`H2_COUNT', 0)
define(`H2', `define(`H2_COUNT', incr(H2_COUNT))' dnl
`
H2_COUNT. $1
')H2(First Section)
H2(Second Section)
H2(Conclusion)
m4로 이를 처리하면 다음과 같은 텍스트가 생성된다.
1. First Section
2. Second Section
3. Conclusion
6. 구현체
OpenSolaris에서 파생된 Heirloom Project에서 유닉스 버전의 m4를 무료로 배포하고 있다.[5] FreeBSD, NetBSD, OpenBSD 등 BSD 계열 운영체제들은 자체적으로 m4 언어를 구현하여 제공한다.[13]
GNU 프로젝트는 m4의 구현체인 ''GNU m4''를 제공한다.[6][7] GNU m4는 기존 구현체에서 발견되는 여러 임의 제한(최대 줄 길이, 매크로 최대 크기, 매크로 개수 등)을 피하도록 설계되었으며, 이러한 제한을 제거하는 것은 GNU 프로젝트의 목표 중 하나이다.[8] GNU m4는 GNU 일반 공중 사용 허가서에 따라 출시된 자유 소프트웨어이며, 현재 Gary V. Vaughan과 Eric Blake가 유지 관리하고 있다.[1] GNU Autoconf 패키지는 GNU m4의 기능을 광범위하게 사용한다.
Windows에서 실행할 수 있도록 빌드된 바이너리도 존재한다.
7. 표준
M4는 POSIX 표준에 정의되어 있다.[14]
8. 참고: 매크로 프로세서
매크로 프로세서는 프로그래머들이 어셈블리 언어를 사용할 때 널리 사용되었다. 프로그래밍 초창기에 프로그래머들은 프로그램의 상당 부분이 반복되는 텍스트로 구성된다는 것을 인식하고, 이 텍스트를 재사용하기 위한 간단한 방법을 고안했다. 프로그래머들은 텍스트 전체 블록을 재사용하는 것뿐만 아니라 유사한 매개변수에 대해 다른 값을 대체하는 것의 장점도 곧 발견했다. 이것이 당시 매크로 프로세서의 사용 범위를 정의했다.
텍스트 매크로 프로세서는 매크로라고 불리는 명령에 따라 텍스트를 치환하는 텍스트 처리 도구이다. 프로그래밍에서 소스 코드의 프리프로세스(전처리)에서 텍스트를 템플릿으로 재이용하는 등 용도로 많이 사용되지만, 모든 문서에서의 정형 처리와 같은 것에도 사용할 수 있다.
8. 1. C preprocessor(C 전처리기)와의 관계
C 전처리기는 m4와 같은 텍스트 기반 매크로 프로세서의 일종이다. 하지만, C 전처리기는 C 언어에 특화되어 있으며, m4에 비해 기능이 제한적이다. `#define` 지시자를 사용하여 매크로를 정의하고, `#include` 지시자를 사용하여 파일을 포함하는 등의 기능을 제공한다.참조
[1]
간행물
The m4 macro processor
http://wolfram.schne[...]
Bell Laboratories
1977
[2]
웹사이트
History of GNU m4
https://www.gnu.org/[...]
[3]
보고서
The M6 Macro Processor. Computing Science Technical Report #2
https://plan9.io/cm/[...]
Bell Labs
[4]
간행물
Exploiting the m4 macro language
http://www.cs.stir.a[...]
Department of Computing Science and Mathematics, University of Stirling, Scotland
1994-09
[5]
문서
m4
Inferno
[6]
웹사이트
GNU m4
https://www.gnu.org/[...]
2020-01-25
[7]
웹사이트
GNU M4 — GNU macro processor
https://www.gnu.org/[...]
2020-01-25
[8]
문서
GNU Coding Standards: Writing Robust Programs
https://www.gnu.org/[...]
[9]
메일링리스트
'[M4-announce] m4-1.4.19 released [stable]'
https://lists.gnu.or[...]
info-gnu
2021-05-28
[10]
논문
A General Purpose Macrogenerator
1965
[11]
문서
프로그래밍툴의 생각
[12]
문서
Software Tools
[13]
웹사이트
GNU M4 - GNU Project - Free Software Foundation
https://www.gnu.org/[...]
[14]
웹사이트
m4
https://pubs.opengro[...]
본 사이트는 AI가 위키백과와 뉴스 기사,정부 간행물,학술 논문등을 바탕으로 정보를 가공하여 제공하는 백과사전형 서비스입니다.
모든 문서는 AI에 의해 자동 생성되며, CC BY-SA 4.0 라이선스에 따라 이용할 수 있습니다.
하지만, 위키백과나 뉴스 기사 자체에 오류, 부정확한 정보, 또는 가짜 뉴스가 포함될 수 있으며, AI는 이러한 내용을 완벽하게 걸러내지 못할 수 있습니다.
따라서 제공되는 정보에 일부 오류나 편향이 있을 수 있으므로, 중요한 정보는 반드시 다른 출처를 통해 교차 검증하시기 바랍니다.
문의하기 : help@durumis.com